/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servidormeteorologico;

import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** Programa encargado de comercializar productos.
 */
@SuppressWarnings("unchecked")
/**
 *
 * @author rafael
 */
public class Servidor {

    static int PUERTO = 16000;
    static boolean detenido = false;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws java.io.IOException {
        boolean end = false;
        System.out.println("**Bienvenido al servidor de datos metereologicos de la USB**");
        while (!end) {
            shell();
        }
    }

    static void shell() throws IOException {
        String line = ""; //Para almacenar la linea leida
        String line2 = ""; //Para almacenar la linea leida
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        Pattern p = Pattern.compile("[0-9]+");
        Matcher m;
        multiServidorHilo hilo = null;

        while ((line != null)) {
            System.out.print("\n*************************************"
                    + "\nOpciones: "
                    + "\n- Iniciar Servidor: Presione i"
                //    + "\n- Detener Servidor: Presione d"
                    + "\n- Cambiar num de puerto: Presione p"
                    + "\n- Cerrar Servidor: Presione q"
                    + "\n**************************************");
            System.out.print("\n\nOpcion: ");

            //lee comando d consola
            line = in.readLine().trim();

            if (line != null && line.length() > 0) {
                switch ((int) line.charAt(0)) {
                    case 'i':
                    case 'I': //letra i: iniciar
                        //se crea un hilo que generara hilos para que atiendan las solicitudes
                        hilo = new multiServidorHilo("hiloServidorConcurrente");
                        break;
                    case 'd':
                    case 'D': //letra d: detener
                        if (hilo == null) {
                            System.out.println(" ** Opcion no valida: para detener el servidor primero debe iniciarlo **");
                            break;
                        } else {
                            System.out.println("presionaron d");
                            detenido = true;

                        }
                        break;
                    case 'q':
                    case 'Q': //letra q: quit
                        System.out.println("Saliendo del programa..");
                        System.exit(0);

                        break;
                    case 'p':
                    case 'P': // letra p: cambiar de puerto
                        System.out.println("Puerto anterior: " + PUERTO);
                        while (true) {
                            System.out.print("Puerto Nuevo: ");
                            line2 = in.readLine().trim();
                            m = p.matcher(line2);

                            if ((line2.length() <= 2) || !m.matches()) {
                                System.out.println(" ** Numero de puerto no valido **");
                            } else {
                                break;
                            }
                        }
                        PUERTO = Integer.parseInt(line2);
                        System.out.println(" * Puerto modificado exitosamente a " + PUERTO + " *");

                        break;
                    default: //comandos no valido
                        System.out.println(" ** Comando no valido **");
                        break;
                }
            }
        }
        in.close();
    }//fin shell
}
